Passed
Push — release/webpack5 ( ae3ff7 )
by Kevin Van
11:12 queued 08:57
created

IndexPage.renderMatchSlider   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
1
import React, { Component, Fragment } from "react"
2
import { graphql } from "gatsby"
3
4
import Layout from "../layouts/index"
5
6
import SEO from "../components/seo"
7
import MetaMatches from "../components/meta-matches"
8
import MatchesOverview from "../components/matches-overview"
9
import MatchesSlider from "../components/matches-slider"
10
import {
11
  NewsItemFeatured,
12
  NewsItemCardRatio,
13
  KcvvTvCard,
14
} from "../components/news-item"
15
import { CardImage } from "../components/cards"
16
import UpcomingEvent from "../components/upcoming-event"
17
import PlayerFeatured from "../components/player--featured"
18
19
import MyMakro from "../images/tag-mymakro.png"
20
import Trooper from "../images/tag-trooper.png"
21
22
class IndexPage extends Component {
23
  renderMatchSlider = () => (
24
    <section className={"grid-container full"}>
25
      <MatchesSlider season="2021" regnumber="00055" />
26
    </section>
27
  )
28
  renderSocialMediaArticle = () => (
29
    <article className={"medium-6 large-12 cell social"}>
30
      <div className={"social-sidebar__wrapper"}>
31
        <a
32
          href="https://facebook.com/KCVVElewijt"
33
          className="btn-social-counter btn-social-counter--fb"
34
          target="_blank"
35
          rel="noopener noreferrer"
36
        >
37
          <div className="btn-social-counter__icon">
38
            <i className="fa fa-facebook"></i>
39
          </div>
40
          <h5 className="btn-social-counter__title">
41
            Volg onze Facebook pagina
42
          </h5>
43
        </a>
44
        <a
45
          href="https://twitter.com/kcvve"
46
          className="btn-social-counter btn-social-counter--twitter"
47
          target="_blank"
48
          rel="noopener noreferrer"
49
        >
50
          <div className="btn-social-counter__icon">
51
            <i className="fa fa-twitter"></i>
52
          </div>
53
          <h5 className="btn-social-counter__title">Volg ons op Twitter</h5>
54
        </a>
55
        <a
56
          href="http://www.instagram.com/kcvve"
57
          className="btn-social-counter btn-social-counter--instagram"
58
          target="_blank"
59
          rel="noopener noreferrer"
60
        >
61
          <div className="btn-social-counter__icon">
62
            <i className="fa fa-instagram"></i>
63
          </div>
64
          <h5 className="btn-social-counter__title">Volg ons op Instagram</h5>
65
        </a>
66
      </div>
67
    </article>
68
  )
69
  renderMakroArticle = () => (
70
    <article className={"medium-6 large-12 cell card"}>
71
      <header className={"card__header"}>
72
        <h4>MyMakro</h4>
73
      </header>
74
      <div className={"card__content"}>
75
        <p>
76
          Link nu jouw Makro voordeelkaart aan onze vereniging. Bij elke aankoop
77
          bij Makro en partners steun je KCVV Elewijt!
78
        </p>
79
        <p>
80
          <img src={MyMakro} alt="QR Code MyMakro" style={{ width: "100%" }} />
81
        </p>
82
        <p>
83
          Scan bovenstaande QR-code met je camera op GSM, of surf naar{" "}
84
          <a
85
            href="https://my.makro.be/nl/link-vereniging/02277464"
86
            target="_blank"
87
            rel="noopener noreferrer"
88
            title="MyMakro link voor KCVV Elewijt"
89
            className={"rich-link"}
90
          >
91
            https://my.makro.be/nl/link-vereniging/02277464
92
          </a>
93
          .
94
        </p>
95
        <p>Onze vereniging dankt jullie van harte!</p>
96
      </div>
97
    </article>
98
  )
99
  renderTrooperArticle = () => (
100
    <article className={"medium-6 large-12 cell card"}>
101
      <header className={"card__header"}>
102
        <h4>Trooper</h4>
103
      </header>
104
      <div className={"card__content"}>
105
        <p>
106
          Trooper werkt samen met een groot aantal webshops die zich in de
107
          kijker willen zetten. In ruil voor een extra klik via Trooper krijgen
108
          wij een percentje op jouw volgende bestelling.
109
        </p>
110
        <p>
111
          <img src={Trooper} alt="QR Code Trooper" style={{ width: "100%" }} />
112
        </p>
113
        <p>
114
          Scan bovenstaande QR-code met je camera op GSM, of surf naar{" "}
115
          <a
116
            href="https://trooper.be/kcvvelewijt"
117
            target="_blank"
118
            rel="noopener noreferrer"
119
            title="Trooper link voor KCVV Elewijt"
120
            className={"rich-link"}
121
          >
122
            https://trooper.be/kcvvelewijt
123
          </a>
124
          .
125
        </p>
126
        <p>
127
          <a
128
            href="/news/2020-04-12-steun-kcvv-elewijt-trooper-mymakro"
129
            className={"rich-link"}
130
          >
131
            Lees er hier meer over!
132
          </a>
133
        </p>
134
      </div>
135
    </article>
136
  )
137
  renderYouthCalendarArticle = () => (
138
    <article className={"medium-6 large-12 cell card"}>
139
      <header className="card__header">
140
        <h4>Jeugdploegen</h4>
141
      </header>
142
      <MatchesOverview season="2021" regnumber="00055" exclude="['2A', '4E']" />
143
    </article>
144
  )
145
146
  renderBTeamCalendarArticle = () => (
147
    <article className={"medium-6 large-12 cell card"}>
148
      <header className={"card__header"}>
149
        <h4>The B-Team</h4>
150
      </header>
151
      <MetaMatches season="2021" region="bra" division="4E" regnumber="00055" />
152
    </article>
153
  )
154
  renderATeamCalendarArticle = () => (
155
    <article className={"medium-6 large-12 cell card"}>
156
      <header className={"card__header"}>
157
        <h4>The A-Team</h4>
158
      </header>
159
      <MetaMatches season="2021" region="bra" division="2A" regnumber="00055" />
160
    </article>
161
  )
162
163
  renderTablebooker = () => (
164
    <>
165
      <article className={"medium-6 large-12 cell card"}>
166
        <header className={"card__header"}>
167
          <h4>
168
            <i className={"fa fa-cutlery"} aria-hidden="true"></i> Mosselfestijn
169
          </h4>
170
        </header>
171
        <div className={"card__content"}>
172
          <p>
173
            Op vrijdag 9, zaterdag 10 en zondag 11 oktober 2020 vindt ons
174
            jaarlijkse Mosselfestijn weer plaats. Om de spreiding te kunnen
175
            garanderen en wachttijden aan de ingang zoveel mogelijk te beperken
176
            werken we dit jaar met een reservatiesysteem. Hieronder kan je zelf
177
            jouw gewenste tijdstip en gezelschap selecteren en een tafel boeken
178
            (voor 07/10/2020).
179
          </p>
180
          <p>
181
            Telefonisch reserveren kan dagelijks tussen 18u en 21u op het nummer{" "}
182
            <a href="tel:+32498735984">0498.73.59.84</a>
183
          </p>
184
          <p>
185
            Ter plaatse een tafel vragen kan, naargelang de beschikbaarheid op
186
            dat moment, maar hou er rekening mee dat we onze capaciteit hebben
187
            moeten verlagen om aan de regelgeving te kunnen voldoen. Wie zeker
188
            wil zijn van zijn plek kan beter reserveren.
189
          </p>
190
        </div>
191
      </article>
192
      <article className={"medium-6 large-12 cell tablebooker"}>
193
        <tbkr-bm-widget
194
          restaurant-id="34742560"
195
          source="website"
196
          use-modal="0"
197
          lang="nl"
198
          theme="light"
199
        ></tbkr-bm-widget>
200
        <script src="https://reservations.tablebooker.com/tbkr-widget-import.min.js"></script>
201
      </article>
202
    </>
203
  )
204
205
  renderWebsiteFeedbackArticle = () => (
206
    <article className={"medium-6 large-12 cell card"}>
207
      <header className={"card__header"}>
208
        <h4>
209
          <i className={"fa fa-commenting-o"} aria-hidden="true"></i> Website
210
          feedback
211
        </h4>
212
      </header>
213
      <div className={"card__content"}>
214
        <p>
215
          Na lang zwoegen is onze nieuwe website eíndelijk online geraakt! We
216
          zijn heel benieuwd naar jullie mening of feedback. Als jullie vinden
217
          dat er iets ontbreekt, of als je bepaalde fouten tegenkomt, zouden we
218
          het ten zeerste appreciëren als je ons even iets laat weten op{" "}
219
          <a href="mailto:[email protected]" className={"rich-link"}>
220
            [email protected]
221
          </a>
222
          !
223
        </p>
224
      </div>
225
    </article>
226
  )
227
  renderExtraContentFooter = (preseason) => (
228
    <section className="grid-container site-content">
229
      <div className="grid-x grid-margin-x">
230
        <section className={"cell large-12 featured-article"}>
231
          <CardImage
232
            title="Update voorbereiding 2020-2021"
233
            localFile={preseason}
234
            link="/games"
235
            metadata={false}
236
          />
237
        </section>
238
      </div>
239
    </section>
240
  )
241
242
  // convertGraphqlToPlayerObject = (player) => {
243
  //   return {
244
  //     nameFirst: player.field_firstname,
245
  //     nameLast: player.field_lastname,
246
  //     shirtNr: player.field_shirtnumber,
247
  //     position: player.field_position,
248
  //     gamesPlayed: player.field_stats_games,
249
  //     cleanSheets: player.field_stats_cleansheets,
250
  //     goalsScored: player.field_stats_goals,
251
  //     cardsYellow: player.field_stats_cards_yellow,
252
  //     cardsRed: player.field_stats_cards_red,
253
  //     imageSrc:
254
  //       player.relationships.field_image.localFile.childImageSharp.fixed.src,
255
  //     link: player.path.alias,
256
  //   }
257
  // }
258
259
  // renderPlayerOfTheWeek = (featuredPlayer) =>
260
  //   featuredPlayer.edges.map(
261
  //     ({ node: potw }) =>
262
  //       potw.relationships.field_player && (
263
  //         <article
264
  //           className={"medium-6 large-12 cell card"}
265
  //           key={potw.relationships.field_player.field_firstname}
266
  //         >
267
  //           <header className={"card__header"}>
268
  //             <h4>Speler van de week</h4>
269
  //           </header>
270
  //           <PlayerFeatured
271
  //             player={this.convertGraphqlToPlayerObject(
272
  //               potw.relationships.field_player
273
  //             )}
274
  //           />
275
  //         </article>
276
  //       )
277
  //   )
278
279
  renderPosts = (posts) => {
280
    let articleCount = 0
281
    let kcvvTvCount = 0
282
283
    return posts.map(({ node }, i) => {
284
      switch (node.internal.type) {
285
        case "node__article":
286
          node.field_featured && (articleCount = articleCount + 2)
287
          !node.field_featured && articleCount++
288
          return (
289
            <Fragment key={i}>
290
              {node.field_featured && <NewsItemFeatured node={node} />}
291
              {!node.field_featured && (
292
                <NewsItemCardRatio node={node} teaser={true} />
293
              )}
294
            </Fragment>
295
          )
296
        case "node__kcvv_tv":
297
          if (kcvvTvCount === 0) {
298
            articleCount = articleCount + 2
299
            kcvvTvCount++
300
            return (
301
              <CardImage
302
                title={node.title}
303
                localFile={
304
                  node.relationships.field_media_article_image.relationships
305
                    .field_media_image.localFile
306
                }
307
                link={node.field_website.uri}
308
                metadata={false}
309
                key={i}
310
              />
311
            )
312
          } else {
313
            articleCount = articleCount + 2
314
            kcvvTvCount++
315
            return <KcvvTvCard node={node} teaser={true} key={i} />
316
          }
317
318
        default:
319
          return ""
320
      }
321
    })
322
  }
323
324
  combineAndSortPosts = (featuredPosts, kcvvTv) => {
325
    return [...featuredPosts.edges, ...kcvvTv.edges].sort((a, b) =>
326
      a.node.timestamp < b.node.timestamp
327
        ? 1
328
        : b.node.timestamp < a.node.timestamp
329
        ? -1
330
        : 0
331
    )
332
  }
333
334
  renderLayoutSidebar = () => {
335
    const { featuredPlayer } = this.props.data
336
    return (
337
      <>
338
        {/* TABLEBOOKER WIDGET */}
339
        {/* this.renderTablebooker() */}
340
341
        {/* A TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING*/}
342
        {this.renderATeamCalendarArticle()}
343
344
        {/* B TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING */}
345
        {this.renderBTeamCalendarArticle()}
346
347
        {/* YOUTH TEAMS OVERVIEW - SUMMARY OF UPCOMING MATCHES */}
348
        {this.renderYouthCalendarArticle()}
349
350
        {/* PLAYER OF THE WEEK ARTICLE IF ANY */}
351
        {/* {featuredPlayer && this.renderPlayerOfTheWeek(featuredPlayer)} */}
352
353
        {/* INFO ARTICLE WITH SOCIAL MEDIA LINKS */}
354
        {this.renderSocialMediaArticle()}
355
356
        {/* INFO ARTICLE WITH REQUEST FOR WEBSITE FEEDBACK */}
357
        {this.renderWebsiteFeedbackArticle()}
358
359
        {/* INFO ARTICLE WITH "TROOPER" CONTENT */}
360
        {this.renderTrooperArticle()}
361
362
        {/* INFO ARTICLE WITH "MYMAKRO" CONTENT */}
363
        {this.renderMakroArticle()}
364
      </>
365
    )
366
  }
367
368
  renderLayoutMain = () => {
369
    const { featuredPosts, kcvvTv } = this.props.data
370
    const posts = this.combineAndSortPosts(featuredPosts, kcvvTv)
371
372
    return (
373
      <>
374
        <UpcomingEvent />
375
376
        {posts && this.renderPosts(posts)}
377
      </>
378
    )
379
  }
380
381
  render() {
382
    return (
383
      <Layout>
384
        <SEO
385
          lang="nl-BE"
386
          title="Er is maar één plezante compagnie"
387
          description="Startpagina van stamnummer 00055: KCVV Elewijt."
388
        />
389
        {/* {this.renderExtraContentFooter(this.props.data.preseason)} */}
390
391
        <section className="grid-container site-content">
392
          {/* LIMITED-WIDTH CONTAINER WITH EXTRA (STICKY) CONTENT, IF ANY */}
393
394
          <div className="grid-x grid-margin-x">
395
            <section className="cell large-8 news_overview__wrapper">
396
              {/* MAIN CONTENT AREA */}
397
              {this.renderLayoutMain()}
398
            </section>
399
            <aside className="cell large-4">
400
              <section className="grid-x featured__matches grid-margin-x">
401
                {/* SIDEBAR CONTENT */}
402
                {this.renderLayoutSidebar()}
403
              </section>
404
            </aside>
405
          </div>
406
        </section>
407
408
        {/* FULL-WIDTH SLICK SLIDER WITH UPCOMING MATCHES */}
409
        {this.renderMatchSlider()}
410
      </Layout>
411
    )
412
  }
413
}
414
415
export const pageQuery = graphql`
416
  query {
417
    featuredPosts: allNodeArticle(
418
      filter: { status: { eq: true }, promote: { eq: true } }
419
      sort: { fields: changed, order: DESC }
420
      limit: 10
421
    ) {
422
      edges {
423
        node {
424
          id
425
          path {
426
            alias
427
          }
428
          created(formatString: "D/M/YYYY")
429
          changed(formatString: "D/M/YYYY")
430
          timestamp: changed(formatString: "x")
431
          title
432
          promote
433
          status
434
          field_featured
435
          body {
436
            value
437
            format
438
            processed
439
            summary
440
          }
441
          relationships {
442
            field_media_article_image {
443
              ...ArticleImage
444
            }
445
            field_tags {
446
              name
447
              path {
448
                alias
449
              }
450
            }
451
          }
452
          internal {
453
            type
454
          }
455
        }
456
      }
457
    }
458
    preseason: file(name: { eq: "preseason2020-2021" }) {
459
      ...KCVVFluid960
460
    }
461
    kcvvTv: allNodeKcvvTv(
462
      filter: { status: { eq: true }, promote: { eq: true } }
463
      sort: { fields: created, order: DESC }
464
      limit: 5
465
    ) {
466
      edges {
467
        node {
468
          id
469
          created(formatString: "D/M/YYYY")
470
          title
471
          timestamp: created(formatString: "x")
472
          relationships {
473
            field_media_article_image {
474
              ...ArticleImage
475
            }
476
          }
477
          field_website {
478
            uri
479
          }
480
          internal {
481
            type
482
          }
483
        }
484
      }
485
    }
486
    featuredPlayer: allNodePotw(
487
      sort: { fields: created, order: DESC }
488
      filter: { status: { eq: true } }
489
      limit: 1
490
    ) {
491
      edges {
492
        node {
493
          relationships {
494
            field_player {
495
              field_firstname
496
              field_lastname
497
              field_shirtnumber
498
              field_stats_games
499
              field_position
500
              field_stats_cleansheets
501
              field_stats_goals
502
              field_stats_cards_yellow
503
              field_stats_cards_red
504
              relationships {
505
                field_image {
506
                  localFile {
507
                    ...KCVVFixedPlayerTeaser
508
                  }
509
                }
510
              }
511
              path {
512
                alias
513
              }
514
            }
515
          }
516
        }
517
      }
518
    }
519
  }
520
`
521
522
export default IndexPage
523